import java.util.Scanner;

//异常
class Person{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try{
            int a = scanner.nextInt();
            int ret = 10/a;
            System.out.println("ret的值为："+ret);
        }catch (NullPointerException e){
            e.printStackTrace();
            System.out.println("我捕获到了NullpointerException这个异常");
        }catch (ArithmeticException e){
            //对捕获到的异常进行处理
            e.printStackTrace();//显示出第几行出现的异常
            System.out.println("捕获到了ArithmeticException这个异常！");
        }
        catch (Exception e){
            //对捕获到的异常进行处理
            e.printStackTrace();//显示出第几行出现的异常
            System.out.println("捕获到了异常！");
        }
        finally {
            scanner.close();
            System.out.println("finally执行了");
        }
    }
    public static void main3(String[] args) {
//        System.out.println(10/0);//该代码可能出现ArithmeticException异常，所以使用try..catch
        System.out.println("before");
        try{
//            System.out.println(10/0);
            System.out.println(10/10);
            int[] array = null;
            System.out.println(array.length);
            System.out.println("hello");//当上一行出现异常的时候，这一行就执行不了，因为会直接进行异常捕获，到catch
        }catch (NullPointerException e){
            e.printStackTrace();
            System.out.println("我补货到了NullpointerException这个异常");
        }catch (ArithmeticException e){
            //对捕获到的异常进行处理
            e.printStackTrace();//显示出第几行出现的异常
            System.out.println("捕获到了ArithmeticException这个异常！");
        }
        catch (Exception e){
            //对捕获到的异常进行处理
            e.printStackTrace();//显示出第几行出现的异常
            System.out.println("捕获到了异常！");
        }
        finally {
            System.out.println("finally执行了");
        }
        System.out.println("after");
    }
    public static void main2(String[] args){
        Person person = new Person();
        try {
            Person person2 = (Person) person.clone();//可能出现异常的代码
        } catch (CloneNotSupportedException e) {//捕获可能出现的异常
            System.out.println("111111");//对捕获到的异常进行处理
        }
        System.out.println("异常处理");
    }
    public static void test(){
        test();
    }
    public static void main1(String[] args) {
        //可以自己定义一些异常
        int a = 10;
        if (a == 10){
            throw new NullPointerException();//此时就是设计当a=10时，会报空指针异常
        }


//        System.out.println(10/0);//会报数学异常
//        //此时你的异常交给了JVM，JVM一旦去处理，直接就是异常的终止程序
//        int[] array = null;
//        System.out.println(array.length);//会报空指针异常
//        System.out.println("============");
//        Person person = new Person();
//        Person person2 = person.clone();//此时就会报受查异常（也就是编译时期异常），需要我们进行处理
//        Person person2 = (Person) person.clone();
//          test();//此时也会报栈溢出异常

    }
}
